#include <iostream>
#include <vector>

class String
{
public:
    static void split(const std::string &str, const std::string &seq, std::vector<std::string>& res)
    {
        // music....#.pop.*
        size_t pos = 0, idx = 0;
        while (idx < str.size())
        {
            pos = str.find(seq, idx);
            std::cout << "pos: " << pos  << " idx: " << idx << std::endl;

            // 能进这个分支只有两种情况，一种就是没有找到分隔符，一种就是真的找到了字符串的末尾
            // 但无论哪种情况，我们只需要截取idx到pos前一位的子字符串即可
            if (pos == std::string::npos)
            {
                res.push_back(str.substr(idx, pos - idx));
                return;
            }

            // 防止出现连续的分隔符，这样会导致结果容器中出现空字符串
            if (pos == idx)
            {
                idx = pos + seq.size();
                continue;
            }

            res.push_back(str.substr(idx, pos - idx));
            idx = pos + seq.size();
        }

        return;
    }
};

int main()
{
    std::vector<std::string> arr;
    String::split("music....#.pop.*", ".", arr);

    for (auto &e : arr)
    {
        std::cout << e << std::endl;
    }
    return 0;
}